The present invention relates to the field of computer graphics imaging, and more particularly to techniques for efficiently representing micro-scale occlusions.
In computer graphics, the process of generating a 2-dimensional image from a 3-dimensional scene comprising one or more objects from a given viewpoint is referred to as rendering. Animated sequences can then be created by rendering a sequence of images as the scene is gradually changed over time. A great deal of time and effort is being devoted towards improving the photo-realism of rendered images. This includes providing graphic systems with the ability to render objects of different types, various textures, reflections, shadows, etc.
The depiction of shadows in rendered images goes a long way in enhancing the realism of a 2-dimensional image. Shadows help to give a 2-dimensional image the look and feel of 3-dimensions. Accordingly, an important component of any graphics system is its ability to determine shadows cast by objects in a scene and to store the shadow information such that it can be used for rendering the 2-dimensional image.
A shadow is cast by occlusion of light by an object or opaque surface. An object can cast a shadow on another object or onto itself (self-shadow). Accordingly, in order to determine shadow information for a scene, a graphics system determines occlusions that occur in the scene. An occlusion occurs when an opaque surface casts a shadow on another surface from the perspective of the light source. For example, an object closer to the light source can cast a shadow on other objects that are further away from the light source in the scene. A surface geometry of one object may occlude another surface of the same object or a different object.
Various techniques are presently used for determining occlusion information. These include Z-buffering techniques, ray-tracing, and others. Various techniques are also used for storing the shadow information. For example, in techniques using z-maps or shadow maps, a shadow map stores shadow depth values that are used by the graphics system to determine which portions of a surface are in shadow during the rendering process. In techniques using ray tracing, a “light feeler” ray is sent out from a shaded point to determine if it hits something on its way to the light source.
The existing techniques of determining occlusions and storing the occlusions information are however not suitable for occlusions that occur on a micro-scale, for example, occlusions that occur at a scale of a few pixels (e.g., less than 3×3 pixels). Such micro-occlusions can be caused, for example, by a weave pattern on a cloth or fabric, by fibers of a material such as wool, velvet, etc., by fur particles, by grass blades, by hair strands, by “fuzzy” materials, knitwear material, and other structures that have fine divots and grooves that are too small to be represented accurately by either a shadow map or a ray-tracing technique. In the past, such micro-scale occlusions were ignored by graphics systems. Alternatively, extremely high resolution shadow maps were used to represent the micro-scale occlusions. These high resolution shadow maps however require extensive memory and processing resources for storage and computations of the shadow maps. As a result, the use of high resolution shadow maps for representing micro-occlusions is very prone to aliasing artifacts, resource expensive, and often impractical if feasible at all.
Improved techniques are thus needed for representing micro-occlusions that are more efficient than conventional techniques.